package com.tedu.review.day02;

/**
 * 类的创建过程（JVM虚拟机--内存创建流程：栈，堆，方法区）
 * 1.从程序入口加载xxx.class文件，类对象存到方法区【方法区：并行】
 * 2.如果发现  加载xxx.class文件中，存在static静态块，存入方法区，创建对象之前
 * 3.发现cs 引用，将这个引用转为地址值：0x000，存入栈内存【栈区：并行】
 * 4.发现new 对象（），在堆内存，给对象申请【随意】空间
 * 理解：宾馆：很多屋子！  前台服务员【引用】-----来一个客人【new】，随便开个房
 * 5.类创建【实例化】执行步骤：先执行方法区：静态块-->执行普通代码块-->初始化
 * 6.给栈中成员变量地址值进行指向，堆内存中随意开辟空间（初始值）【与栈内存地址一致】
 * 7.给栈中成员变量地址值进行指向，堆内存中随意开辟空间（赋值）【与栈内存地址一致】
 *
 * 调用过程：
 * 1.栈：编译器自动分配，使用完毕自动释放
 * 2.堆：一般由程序员分配释放，若程序员没有释放，Java程序自动进行垃圾回收
 *                                        GC垃圾回收
 * 3.全局区（静态区）：全局变量和静态变量在内存中存在在一起的，
 *                  初始化的全局变量和静态变量存在在一起的
 *                  未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
 *                   -----程序结束   释放
 * 4.常量池：存在方法区中--程序结束  释放【JavaAPI  字符串】
 * 5.面向对象特性：封装----目的：实现信息隐藏，保证某些属性和方法不被外界污染
 * 【重要】JavaBean  实体类  要素：①属性被封装
 *                              ②设置set和get方法
 *                              ③默认初始化构造器   【建议：调toString（）查看属性值】
 *                              ④【实体类--字节码--传输数据】IO流 接口
 * 6.内部类：外部类套用内部类，外部类可以使用内部类的属性和方法
 *          成员（普通）内部类：②内部类相当于外部类的成员变量
 *          静态内部类：③直接访问，不可使用外部类的普通属性【可以使用静态属性】
 *                    静态内部类使用外部类的属性，属性一定是静态属性
 *          方法内部类：④内部类定义在方法中，范围小，使用麻烦！   考试专用
 *                    修饰符：必须是默认的
 *          匿名内部类：①接口，抽象类 才能进行匿名内部类编写-->表达式
 *          掌握：以上内部类的编写方法【知道是什么内部类】，创建以上内部类的方法【创建内部类】
 *  7.面向对象特性：继承    类与类之间发生关系  子类  extends 父类{}
 *  ①Java中只允许单继承，可以多层继承    【一脉单传】    子类可以继承父类的属性和方法
 *           单继承：继承一个父类
 *           多层继承：依次进行继承
 *           爷爷 extends 祖祖{}
 *          父类 extends 爷爷{}
 *         子类 extends 父类{}
 *  ②子类可以继承父类的属性和方法，父类中存在私有属性时候无法继承！  set和get方法
 *  ③继承构造器，子类继承父类：默认调用父类构造方法，在调用子类构造器
 *   子类构造器中默认存在super（）：调用父类的构造器
 *  ④重写和重载【重要】 针对类中方法，继承关系！区别：定义和使用
 *  ⑤继承关键字-->    extends        类与类     super----使用方法一致
 *                   【没有继承也可以使用】       this-----使用方法一致
 *                   final关键字  最终
 *  8.面向对象的特性：多态   继承之后实现方法互通  【普通类，，抽象类，，接口类】
 *  数据类型：基本数据类型【存在强制类型转换】
 *          引用类型【存在向下造型】
 *  向上造型：父类对象 引用=new 子类对象（）;【创建对象：常见】
 *          使用：普通类  抽象类   接口类，子类一定具备覆盖父类的方法【重写】
 *  向下造型：①父类对象 引用=new 子类对象（）;
 *          ②父类对象 引用=（子类对象）向上造型引用;
 */
/*测试类：类的创建过程   一个.java*/
public class 类的创建过程 {
    public static void main(String[] args){
        /*完成第一次创建*/
        CountrySide cs=new CountrySide();
    }
}
class CountrySide{
    /*代码*/
    {
        System.out.println("请问厕所在哪个科室：赵四");
    }
    /*静态代码*/
    static {
        System.out.println("爹，我跟小蒙的事儿你就别管了~");
    }
    /*①成员变量：变量，类中存在变量就是成员变量，可以由修饰符修饰*/
    private String name="赵四";
    private int age=56;
    /*②构造器|构造方法|句柄：创建对象初始化*/
    public CountrySide(){
     name="刘能";
        System.out.println(name+"这车能看不能摸，但是可以往外说~");
    }
}